home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_08 / weber / scalesfl.c < prev    next >
Text File  |  1994-06-11  |  2KB  |  41 lines

  1.     if (!init_fax_scale(x_scale,y_scale,src_bytes_per_line))
  2.         {                               /* initialize scaler */
  3.         printf("Scale values out of range (3%% to 3200%%).\n");
  4.         cleanup();
  5.         exit(EXIT_BAD_SCALE);
  6.         }
  7.     total_lines = 0;
  8.     do      /* main read/scale/write loop */
  9.         {   /* note: we have split the buffer so read_pcx and write_pcx stay in lock step */
  10.         if ((src_actual_size = read_pcx(src_scale_buffer,src_max_size)) == IO_ERROR)
  11.             {                               /* read a buffer */
  12.             printf("Error reading source file - %s.\n",src_file);
  13.             cleanup();
  14.             exit(EXIT_READ_ERROR);
  15.             }
  16.         dest_lines = 0;                     /* set up line counters and pointers */
  17.         src_ptr = src_scale_buffer;
  18.         dest_ptr = dest_scale_buffer;
  19.         for (src_lines = src_actual_size/src_bytes_per_line ; src_lines > 0 ; src_lines--)
  20.             {                               /* scale each source line */
  21.             repeat = scale_fax_line(dest_ptr,src_ptr);
  22.             dest_lines += repeat;
  23.             while (repeat--)                /* repeat it if necessary */
  24.                 {
  25.                 if (repeat)
  26.                     memcpy(dest_ptr+dest_bytes_per_line,dest_ptr,dest_bytes_per_line);
  27.                 dest_ptr += dest_bytes_per_line;
  28.                 }
  29.             src_ptr += src_bytes_per_line;  /* move pointers */
  30.             }
  31.         assert(dest_ptr <= src_scale_buffer + SCALE_BUFFER_SIZE);
  32.         assert(src_ptr <= dest_scale_buffer);
  33.         if (write_pcx(dest_scale_buffer,dest_lines*dest_bytes_per_line) == IO_ERROR)
  34.             {                               /* write out destination buffer */
  35.             printf("Cannot write to destination file - %s.\n",dest_file);
  36.             cleanup();
  37.             exit(EXIT_WRITE_ERROR);
  38.             }
  39.         total_lines += dest_lines;
  40.         } while (src_actual_size==src_max_size && total_lines<MAX_FAX_LENGTH);
  41.